<?php

/**
 * Nettoyer une chaine de caracteres issue d'un formulaire
 */
function clean_str($str)
{
        $str = htmlspecialchars(trim($str));
        if (get_magic_quotes_gpc()) {
                $str = stripslashes($str);
        }
        return $str;
}

/**
 * Afficher un tableau sous form de liste
 */
function print_array($tab)
{
        echo '<ul class="list">';
        foreach ($tab as $item)
        {
                echo '<li>'.$item.'</li>';
        }
        echo '</ul>';
}

/**
 * Deterrmine si une adresse e-mail est valide
 * @return true si l'adresse est bonne, sinon false
 */
function valid_email($email)
{
        return preg_match('/^([\w._-]+@[a-z._-]+?\.[a-z]{2,4})$/i', $email);
}


/**
 * Conversion d'un timestamp en chaîne de caractères
 * @param[in] timestamp: temps à convertir
 * @return 'jj/mm HH:MM'
 */
function time_to_str($timestamp)
{
        return date('d/m  H:i', $timestamp);
}

/**
 * Conversion d'un timestamp en chaîne de caractères
 * @param[in] timestamp: temps à convertir
 * @return 'jj/mm/aaaa à HH:MM'
 */
function std_time_to_str($timestamp)
{
        return date('d/m/Y à H:i', $timestamp);
}

/**
 * Determine si une date est valide
 * @return true si date au format JJ/MM/AAAA
 */
function valid_date($date)
{
        return preg_match('/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/', $date);
}

/**
 * Crypter un mot de passe (SHA1 inversé)
 */
function crypt_password($password)
{
        return invert_hash(sha1($password));
}

/**
 * Fonction d'inversion des caract鳥s d'une chaine
 * @param hash: une chaine de caractères de longeur paire
 * @return la chaine avec les caractères inversés
 */
function invert_hash($hash)
{
        $inverted = "";
        $j = 0;
        for ($i=0 ; $i < strlen($hash) ; $i++) {
                $inverted .= substr($hash,$j+1,1);
                $inverted .= substr($hash,$j,1);
                $j += 2;
        }
        return $inverted;
}

/**
 * Connecter une session
 * @param email: email servant de login
 * @param password: hash du mot de passe
 * @return true si connexion r궳sie, sinon false
 */
function session_connect($email, $password)
{
        $email = mysql_real_escape_string($email);
        
        $sql = 'SELECT ID, mail, pseudo,statut
                FROM joueur
                WHERE mail = "'.$email.'" AND pass = "'.$password.'";';
        
        $data = query($sql);
        if($row = mysql_fetch_assoc($data)) {
                $_SESSION['is_connect'] = true;
                $_SESSION['ID'] = intval($row['ID']);
                $_SESSION['mail'] = $row['mail'];
                $_SESSION['pseudo'] = $row['pseudo'];
				$_SESSION['statut'] = $row['statut'];
				return true;
        }
        else {$_SESSION['is_connect'] = false;
			return false;
		}
        //return false;
}

/**
 * Affiche un en-tête de tableau $name d'une colonne de tri
 * La colonne a la classe "sorted" si $self_row est $sorted_row
 * Icône flèche bas si le tri est $is_asc, sinon flèche haut
 */
function print_sorted_th($name, $self_row, $sorted_row, $is_asc, $uri = NULL)
{
    $sorted = $self_row == $sorted_row;
    echo '<th';
    // si colonne de tri
    if ($sorted)
    {
        //echo ' class="ui-state-active"';
    }
    echo '>
        <a href="'.$uri.'&sort='.$self_row;
    if (!$is_asc and $sorted)
    {
        // si le tri est ascendant, le lien propose le tri descendant
        // sinon, le tri est déjà ascendant par défaut dans le lien
        echo '&asc';
    }
    echo '">'.$name.'  '; // fin <a>
    if (!$is_asc and $sorted)
    {
        // seule la colonne triée permet d'alterner ascendant/descendant
        // -> le seul cas on l'on affiche un lien de tri descendant est
        // lorsque le lien appartient à la colonne triée ET qu'elle n'est pas
        // déjà en desc
       echo '<img class="classement" src="design/bullet_arrow_down.png" alt="^" />';
    }
    else
    {
        // les autres colonnes proposent toujours le tri ascendant par défaut
        echo '<img class="classement" src="design/bullet_arrow_up.png" alt="v" />';
    }
    echo '</a>
        </th>';
}


/**
 * Determine si un mot de passe est valide
 * @return true si le password est bon, false sinon
 */
function valid_pass($pass)
{
        return preg_match('/^([A-Za-z0-9._-]+){6,}$/',$pass);
}

/**
 * Calcul le nombre de point que rapporte un prono gagant a un joueur
 */
function calcul_pts_gagnant($pts_eqd,$pts_eqe,$score_eqd,$score_eqe)
{		
		$marge=2;
		$pts=0;
		if ($pts_eqd!=null){
			$pts+=1;
			$somme=$score_eqd+$score_eqe;
			if (($somme-$marge<$pts_eqd+$pts_eqe)&&($pts_eqd+$pts_eqe<$somme+$marge)){
				$pts+=1;
			}
			$difference=$score_eqd-$score_eqe;
			if (($difference-$marge<$pts_eqd-$pts_eqe)&&($pts_eqd-$pts_eqe<$difference+$marge)){
				$pts+=1;
			}
		}	
		return $pts;
}

/**
 * Calcul le nombre de point que rapporte un prono a un joueur
 */
function calcul_point($pts_eqd,$pts_eqe,$score_eqd,$score_eqe)
{		
		$points=0;
		if ($pts_eqd<$pts_eqe){
			if($score_eqd<$score_eqe){// cas gagnant
				$points=calcul_pts_gagnant($pts_eqd,$pts_eqe,$score_eqd,$score_eqe);
			}
		}
		else {
			if ($pts_eqd>$pts_eqe){
				if($score_eqd>$score_eqe){// cas gagnant
					$points=calcul_pts_gagnant($pts_eqd,$pts_eqe,$score_eqd,$score_eqe);
				}
			}
			else {
				if ($score_eqd==$score_eqe){//cas gagnant
					$points=calcul_pts_gagnant($pts_eqd,$pts_eqe,$score_eqd,$score_eqe);
				}
			}
		}
        return $points;
}
